package org.springframework.boot;

import org.springframework.core.env.PropertySource;
import org.springframework.core.env.SimpleCommandLinePropertySource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.ResourcePropertySource;

import java.io.IOException;

public class Step3 {
    public static void main(String[] args) throws IOException {
        /**
         * 整个来自于各个地方的变量：如系统环境变量, properties, yaml,VM_OPTION
         */
        ApplicationEnvironment env = new ApplicationEnvironment();
        env.getPropertySources().addLast(new ResourcePropertySource(new ClassPathResource("step3.properties")));  //设置属性来源为一个step3.properties，添加到最后，即优先级最低
        env.getPropertySources().addFirst(new SimpleCommandLinePropertySource(args));  //args,来源于配置里的Program argument（执行javac命令时可以跟上参数，会传递到args）案列：--server.port=7070

        /**
         * 一个systemProperties，一个systemEnvironment.VM_OPTION中的添加的参数(比如添加-DJAVA_HOME=abc)就是systemProperties里的.
         * 操作系统的环境变量就是systemEnvironment。systemProperties的优先与systemEnvironment
         */
        for (PropertySource<?> propertySource : env.getPropertySources()) {
            System.out.println(propertySource);
        }
        System.out.println(env.getProperty("JAVA_HOME"));
        System.out.println(env.getProperty("server.port"));
    }
}
